tg-me.com/pyproglib/6684
Last Update:
Модуль enum
в Python используется для создания перечислений — объектов, которые упрощают работу с группами связанных константных значений. Это полезно для удобного различия значений без привязки к их конкретным значениям, например, при работе с параметрами конфигурации.Enum
и auto
Перечисления позволяют избежать ошибок с опечатками и делают код более читаемым.
Пример с конкретными значениями:
from enum import Enum
class TempUnit(Enum):
CELSIUS = "celsius"
FAHRENHEIT = "fahrenheit"
def get_temperature(city, unit):
return 18.0 if unit == TempUnit.CELSIUS else 64.4
print(get_temperature("Lisbon", TempUnit.CELSIUS)) # 18.0
Перечисления упрощают работу с значениями:
print(TempUnit.CELSIUS.name) # CELSIUS
print(TempUnit.CELSIUS.value) # celsius
Для целочисленных значений можно использовать
auto()
для автоматической нумерации:from enum import Enum, auto
class Weekday(Enum):
SUNDAY = auto()
MONDAY = auto()
TUESDAY = auto()
WEDNESDAY = auto()
THURSDAY = auto()
FRIDAY = auto()
SATURDAY = auto()
Для строковых значений можно использовать
StrEnum
:from enum import StrEnum
class TempUnit(StrEnum):
CELSIUS = "celsius"
FAHRENHEIT = "fahrenheit"
print(TempUnit.CELSIUS.capitalize()) # Celsius
Автоматическая строковая нумерация:
from enum import StrEnum, auto
class TempUnit(StrEnum):
CELSIUS = auto()
FAHRENHEIT = auto()
assert TempUnit.CELSIUS.value == "celsius"
Целочисленные перечисления с
IntEnum
:from enum import IntEnum
class SomeIntegers(IntEnum):
ONE = 1
TWO = 2
THREE = 3
print(SomeIntegers.TWO + 1) # 3
Флаги с
Flag
для комбинирования флагов:from enum import Flag, auto
class NotificationMethod(Flag):
IN_APP = auto()
PUSH = auto()
EMAIL = auto()
SMS = auto()
user_settings = NotificationMethod.IN_APP | NotificationMethod.PUSH
print(user_settings) # <NotificationMethod.IN_APP|PUSH: 3>
Проверка уникальности значений с помощью декоратора
@unique
:from enum import Enum, unique
@unique
class EnumWithAliases(Enum):
ONE = 1
TWO = 2
THREE = 3
UNO = 1 # Ошибка, дублирующее значение
Проверка непрерывности значений с помощью декоратора
@verify(CONTINUOUS)
:from enum import Enum, verify, CONTINUOUS
@verify(CONTINUOUS)
class Nums(Enum):
THREE = 3
FOUR = 4
FIVE = 5
SIX = 6
@verify(CONTINUOUS)
class NumsHole(Enum):
THREE = 3
FOUR = 4
SIX = 6 # Ошибка, отсутствует 5
Библиотека питониста #буст